NexusPi Git Node
lib/microReticulum/src/Cryptography/Token.h 20ec0b4ee3f3e7a8b3c8d00dcdcd5afdcf2bc840 (20ec0b4e) Text, 1.52 KB
Tff7b72#Tff7b72pragma once
Tff7b72#Tff7b72include T8b949e"Random.h"
Tff7b72#Tff7b72include T8b949e"../Bytes.h"
Tff7b72#Tff7b72include T8b949e"../Type.h"
Tff7b72#Tff7b72include T8b949e<stdint.h>
Te6edf3namespace Te6edf3RNS Tb4b4b4{ Te6edf3namespace Te6edf3Cryptography Tb4b4b4{
T8b949e/*
This class provides a slightly modified implementation of the Fernet spec
found at: https://github.com/fernet/spec/blob/master/Spec.md
According to the spec, a Fernet token includes a one byte VERSION and
eight byte TIMESTAMP field at the start of each token. These fields are
not relevant to Reticulum. They are therefore stripped from this
implementation, since they incur overhead and leak initiator metadata.
*/
Te6edf3class Te6edf3Token Tb4b4b4{
Te6edf3publicTff7b72:
Te6edf3using Te6edf3Ptr Tff7b72= Te6edf3stdTff7b72:Tff7b72:Te6edf3shared_ptrTff7b72<Te6edf3TokenTff7b72>Tb4b4b4;
Te6edf3publicTff7b72:
Tff7b72static Tff7b72inline Tff7b72const Te6edf3Bytes Te6edf3generate_keyTb4b4b4(Te6edf3RNSTff7b72:Tff7b72:Te6edf3TypeTff7b72:Tff7b72:Te6edf3CryptographyTff7b72:Tff7b72:Te6edf3TokenTff7b72:Tff7b72:Te6edf3token_mode Te6edf3mode Tff7b72= Te6edf3RNSTff7b72:Tff7b72:Te6edf3TypeTff7b72:Tff7b72:Te6edf3CryptographyTff7b72:Tff7b72:Te6edf3TokenTff7b72:Tff7b72:Te6edf3MODE_AES_256_CBCTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3mode Tff7b72=Tff7b72= Te6edf3RNSTff7b72:Tff7b72:Te6edf3TypeTff7b72:Tff7b72:Te6edf3CryptographyTff7b72:Tff7b72:Te6edf3TokenTff7b72:Tff7b72:Te6edf3MODE_AES_128_CBCTb4b4b4) Tff7b72return Te6edf3randomTb4b4b4(T79c0ff32Tb4b4b4)Tb4b4b4;
Tff7b72else Tff7b72if Tb4b4b4(Te6edf3mode Tff7b72=Tff7b72= Te6edf3RNSTff7b72:Tff7b72:Te6edf3TypeTff7b72:Tff7b72:Te6edf3CryptographyTff7b72:Tff7b72:Te6edf3TokenTff7b72:Tff7b72:Te6edf3MODE_AES_256_CBCTb4b4b4) Tff7b72return Te6edf3randomTb4b4b4(T79c0ff64Tb4b4b4)Tb4b4b4;
Tff7b72else Te6edf3throw Te6edf3new Te6edf3stdTff7b72:Tff7b72:Te6edf3invalid_argumentTb4b4b4(Ta5d6ff"Ta5d6ffInvalid token mode: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3modeTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3publicTff7b72:
Te6edf3TokenTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3keyTb4b4b4, Te6edf3RNSTff7b72:Tff7b72:Te6edf3TypeTff7b72:Tff7b72:Te6edf3CryptographyTff7b72:Tff7b72:Te6edf3TokenTff7b72:Tff7b72:Te6edf3token_mode Te6edf3mode Tff7b72= Te6edf3RNSTff7b72:Tff7b72:Te6edf3TypeTff7b72:Tff7b72:Te6edf3CryptographyTff7b72:Tff7b72:Te6edf3TokenTff7b72:Tff7b72:Te6edf3MODE_AESTb4b4b4)Tb4b4b4;
Tff7b72~Te6edf3TokenTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3publicTff7b72:
Tffa657bool Te6edf3verify_hmacTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3tokenTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3Bytes Td2a8ffencryptTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3dataTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3Bytes Td2a8ffdecryptTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3tokenTb4b4b4)Tb4b4b4;
Te6edf3privateTff7b72:
Te6edf3RNSTff7b72:Tff7b72:Te6edf3TypeTff7b72:Tff7b72:Te6edf3CryptographyTff7b72:Tff7b72:Te6edf3TokenTff7b72:Tff7b72:Te6edf3token_mode Te6edf3_mode Tff7b72= Te6edf3RNSTff7b72:Tff7b72:Te6edf3TypeTff7b72:Tff7b72:Te6edf3CryptographyTff7b72:Tff7b72:Te6edf3TokenTff7b72:Tff7b72:Te6edf3MODE_AES_256_CBCTb4b4b4;
Te6edf3Bytes Te6edf3_signing_keyTb4b4b4;
Te6edf3Bytes Te6edf3_encryption_keyTb4b4b4;
Tb4b4b4}Tb4b4b4;
Tb4b4b4} Tb4b4b4}
Served by rngit 1.4.2 - Generated in 0.01s